package com.feicheng.service;

import com.feicheng.persistence.entity.Permission;
import com.feicheng.persistence.entity.Role;
import com.feicheng.persistence.entity.User;
import com.feicheng.common.result.ResultInfo;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * <p>
 *  业务逻辑接口
 *  系统相关的服务
 * </p>
 *
 * @author cailongyang
 */
public interface IFSystemService {

    /**
     * 分页查询用户信息
     * @param currentPage 当前页
     * @param pageSize 每页条数
     * @param account 检索条件：账户关键字
     * @param tel 检索条件：电话关键字
     * @param secId 检索条件：身份证关键字
     * @return
     */
    public ResultInfo selectUser(
            Integer currentPage,
            Integer pageSize,
            String account,
            String tel,
            String secId,
            Integer storeId);

    /**
     * 查询用户信息
     * @param account 检索条件：账户关键字
     * @return
     */
    public ResultInfo selectUserByAccount(String account);

    /**
     * 根据用户ID查询对应用户
     * @param userId 检索主键：用户ID
     * @return
     */
    public ResultInfo selectUserById(Integer userId);

    /**
     * 添加用户和对应角色
     * @param user 用户信息
     * @param roles 角色信息
     * @return
     */
    public ResultInfo addUser(User user, String roles);

    /**
     * 修改用户和对应角色
     * @param user 用户信息
     * @param roles 角色信息
     * @return
     */
    public ResultInfo updateUser(User user, String roles);

    /**
     * 删除用户信息
     * @param userId 删除主键：用户ID
     * @return
     */
    public ResultInfo deleteUser(Integer userId);

    /**
     * 分页查询角色信息
     * @param roleName 检索条件：角色名
     * @param statu 检索条件：角色状态
     * @param currentPage 当前页
     * @param pageSize 每页条数
     * @return
     */
    public ResultInfo selectRoles(
            String roleName,
            Boolean statu,
            Integer currentPage,
            Integer pageSize
    );

    /**
     * 取得所有角色
     * @param statu 检索条件：角色状态
     * @return
     */
    public ResultInfo allRoles(Boolean statu);

    /**
     * 根据角色ID取得角色信息
     * @param roleId 检索主键：角色ID
     * @return
     */
    public ResultInfo getRoleById(Integer roleId);

    /**
     * 添加角色以及角色相关的权限
     * @param role 角色信息
     * @param permissions 权限信息
     * @return
     */
    public ResultInfo addRole(Role role, String permissions);

    /**
     * 更新角色以及角色相关的权限
     * @param role 角色信息
     * @param permissions 权限信息
     * @return
     */
    public ResultInfo updateRole(Role role, String permissions);

    /**
     * 删除角色信息
     * @param roleId 删除主键：角色ID
     * @return
     */
    public ResultInfo deleteRole(Integer roleId);

    /**
     * 分页查询权限信息
     * @param name 检索条件： 权限名称
     * @param path 检索条件： 权限路径
     * @param statu 检索条件： 状态
     * @param pId 检索条件：父级权限ID
     * @param currentPage 当前页
     * @param pageSize 每页数量
     * @return
     */
    public ResultInfo getPermissions(
        String name,
        String path,
        Boolean statu,
        Integer pId,
        Integer currentPage,
        Integer pageSize
    );

    /**
     * 取得所有权限信息
     * @param statu 检索条件：状态
     * @param pId 检索条件：父级权限ID
     * @return
     */
    public ResultInfo allPermissions(Boolean statu, Integer pId);

    /**
     * 取得权限信息
     * @param permissionId 检索主键：权限ID
     * @return
     */
    public ResultInfo getPermission(Integer permissionId);

    /**
     * 添加权限信息
     * @param permission 权限信息
     * @return
     */
    public ResultInfo addPermission(Permission permission);

    /**
     * 添加权限信息
     * @param permission 权限信息
     * @return
     */
    public ResultInfo updatePermission(Permission permission);

    /**
     * 删除权限信息
     * @param permissionId 删除主键：权限ID
     * @return
     */
    public ResultInfo deletePermission(Integer permissionId);

}
